[bits 32]

; 函数调用约定
; edi、esi、edx、ecx、r8、r9

section .text
global _task_switch
_task_switch:
    push ebp
    mov ebp, esp

    push ebx
    push esi
    push edi

    mov eax, esp            ; 得到current栈帧的栈顶地址
    and eax, 0xFFFFF000     ;
    mov [eax], esp          ; 将current.stack设置为当前函数栈帧的栈顶地址
    mov eax, [ebp + 8]      ; 获取next并存放到eax中
    mov esp, [eax]          ; 将esp设置为next.stack（跳转到next函数栈）

    pop edi
    pop esi
    pop ebx
    pop ebp
    ret